package com.infoland.modules.main.controller;

import com.alibaba.fastjson.JSONArray;
import com.infoland.common.interceptor.OverAllParamsInterceptor;
import com.infoland.common.security.ShiroUtils;
import com.infoland.modules.basic.BaseController;
import com.infoland.modules.basic.Message;
import com.infoland.modules.main.model.Admin;
import com.infoland.modules.main.service.SystemService;
import com.infoland.modules.main.validator.LoginValidator;
import com.jfinal.aop.Before;
import com.jfinal.aop.Clear;
import com.jfinal.ext.plugin.shiro.ShiroMethod;
import com.jfinal.plugin.activerecord.Page;

public class AdminController extends BaseController<Admin> {

	public void index() {
		if (ShiroMethod.notAuthenticated()) {
			render("/modules/login.html");
		} else {
			redirect("/main");
		}
	}

	@Clear
	public void notAuthenticated() {
		renderError(401);
	}

	public void getAdminId() {
		renderJson(ShiroUtils.getLoginAdmin());
	}

	/**
	 * 查询
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午1:01:48
	 */
	public void adminList() {
		Page<Admin> pager = SystemService.service.findAdminByPage(this);
		renderJson(pager);
	}

	/**
	 * 跳转修改
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午8:19:15
	 */
	public void editAdmin() {
		Long id = getJSONParaToLong("id");
		Admin admin = SystemService.service.findOneAdmin(id);
		renderJson(admin);
	}

	/**
	 * 修改用户
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午8:39:57
	 */
	public void updateAdmin() {
		JSONArray roleIds = getJSONArray("roleIds");
		Admin admin = getJSONModel("admin",Admin.class);
		Message message = SystemService.service.updateAdmin(admin, roleIds);
		renderJson(message);
	}

	/**
	 * 删除用户（可批量）
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午8:39:44
	 */
	public void deleteAdmin() {
		JSONArray ids = getJSONArray("ids");
		Message message = SystemService.service.deleteAdmin(ids);
		renderJson(message);
	}

	/**
	 * 注销用户
	 * 
	 * @author fast_ly
	 * @time:2016年8月24日 下午8:39:33
	 */
	public void writtenOffAdmin() {
		Long id = getJSONParaToLong("id");
		Message message = SystemService.service.writtenOffAdmin(id);
		renderJson(message);
	}

	/**
	 * 恢复用户
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午8:39:04
	 */
	public void resumedAdmin() {
		Long id = getJSONParaToLong("id");
		Message message = SystemService.service.resumedAdmin(id);
		renderJson(message);
	}

	/**
	 * 执行保存
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午2:49:57
	 */
	public void saveAdmin() {
		JSONArray roleIds = getJSONArray("roleIds");
		Admin admin = getJSONModel("admin",Admin.class);
		Message message = SystemService.service.saveAdmin(roleIds, admin);
		renderJson(message);
	}

	/**
	 * 主页
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午1:02:14
	 */
	@Before(OverAllParamsInterceptor.class)
	public void main() {
		setAttr("adminName", ShiroUtils.getLoginAdmin().getAName());
		render("/modules/index.html");
	}

	/**
	 * 登录成功后加载与用户角色对应的菜单
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午1:02:24
	 */
	public void menus() {
		renderJson(ShiroUtils.getAdminMenus());
	}

	/**
	 * 登录
	 *
	 * @author fast_ly
	 * @time:2016年8月24日 下午1:02:48
	 */
	@Clear
	@Before(LoginValidator.class)
	public void loginVerify() {
		Message message = SystemService.service.login(this);
		if (message.isSuccess()) {
			redirect("/main");
		} else {
			setAttr("message", message.getMessage());
			render("/modules/login.html");
		}
	}

	/**
	 * 登陆 图片验证码
	 *
	 * @author Mandarava
	 */
	@Clear
	public void loginCaptcha() {
		renderCaptcha();
	}

	/**
	 * 退出
	 *
	 * @author fast_ly
	 * @time:2016年8月29日 下午4:17:28
	 */
	public void logout() {
		SystemService.service.logout();
		render("login.html");
	}
}
